// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

// 云函数入口函数
// 获取班级详情
exports.main = async (event, context) => {
  const db = cloud.database()
  const { class_id, role } = event
  const wxContext = cloud.getWXContext()
  const openid = cloud.database()
  // 班级基本信息
  const class_info = await db.collection('class').doc(class_id).get()
  // 班级公告
  const notices = await db.collection('notice').where({ class_id }).get()
  // 签到任务
  const signsResult = await db.collection('sign').where({ class_id }).get()
  // 签到情况
  const signRecords = await db.collection('sign-record').where({ class_id }).get()
  // 班级教师文件
  const files = await db.collection('file').where({ class_id, role: 2 }).get()
  // 班级平时分数情况
  const scores = await db.collection('score').where({ class_id }).get()
  
  let signs = null

  // 处理学生和教师签到任务数组不同的地方
  if (role === 1) {
    // 学生
    signs = signsResult.data.map(s => {
        let done = false
        if (signRecords.data.find(r => r.sign_id === s._id)) {
          done = true
        }
        return { ...s, done }
    })
  } else {
    // 教师
    /**
        教师和学生的 sign 数组有所不同
        教师需要加上 hope 和 exist 来显示理应签到人数与实际签到人数
        不需要 done 变量
       */
      signs = signsResult.data.map(s => {
        // 控制下方小面板显示与否的变量
        const visible = false
        // 理应签到人数即为班级成员数量
        const hope = class_info.data.members.length
        // 实际签到人数由 sign-record 查询得来
        let exist = 0
        for (let i = 0; i < signRecords.data.length; i ++) {
          // 如果查到一条 sign_id 与当前签到id相同的签到记录, 则实际签到人数+1
          if (signRecords.data[i].sign_id === s._id) {
            exist ++
          }
        }
        return { ...s, hope, exist, visible }
      })
  }


  return {
    classInfo: class_info.data,
    notices: notices.data,
    signs,
    signRecords: signRecords.data,
    files: files.data,
    scores: scores.data
  }
}